﻿Формат модулей stc и stp
========================

stc
Offset Size  Name               Description
+0     1     Delay              Глобальное число прерываний между нотами
+1     2     Positions Pointer  Указатель на таблицу Positions
+3     2     Ornaments Pointer  Указатель на таблицу Ornaments
+5     2     Patterns Pointer   Указатель на таблицу Patterns (длина всех паттернов одинаковая!)
+7     18    Identifier         Строка 'SONG BY ST COMPILE' либо другая информация
+25    2     Size               Длина всего блока в байтах (может быть некорректной)
+27    99*X  Samples Pointer    Таблица Samples (Инструменты) по 99 байт на инструмент
                                первый байт номер инструмента
                                инструменты могут идти не по порядку,
                                поэтому проверяем номер в первом байте сэмплов
                                X=1-16
+27+99*X     Data               Остальные данные

stp
Offset Size  Name               Description
+0     1     Delay              Глобальное число прерываний между нотами
+1     2     Positions Pointer  Указатель на таблицу Positions
+3     2     Patterns Pointer   Указатель на таблицу Patterns
+5     2     Ornaments Pointer	Указатель на таблицу Ornaments
+7     2     Samples Pointer	Указатель на таблицу Samples
+9     1     num				Количество инициализируемых смещений, если 0 - то не нужно.
								Смещения начинаются с Patterns Pointer
+10    x	 Patterns 			начало первого раздела.

==============================================================================

Таблица Positions (stc)

 Off  Size     Name        Description
 +0   1        Count       Общее число позиций в таблице
 +1   Count*2              Данные позиций по 2 байта, см. ниже

Каждая позиция занимает 2 байта
 Off  Size     Name            Description
 +0   1        PNum            Номер паттерна для данной позиции
 +1   1        Transposition   Глобальное смещение тона для паттерна

------------------------------------------------------------------------------
Таблица Positions (stp)

Off  Size     Name        Description
 +0   1        Count       Общее число позиций в таблице
 +1   1        Loop        Номер позиции для зацикливания
 +2   Count*2              Данные позиций по 2 байта, см. ниже
 
Каждая позиция занимает 2 байта
 Off  Size     Name            Description
 +0   1        PNum*6          Номер паттерна для данной позиции * 6
 +1   1        Transposition   Глобальное смещение тона для паттерна

==============================================================================

Таблица Patterns (stc)

Каждая позиция занимает 7 байт
 Off Size Name         Description
 +0  1    Number       Порядковый номер паттерна
 +1  2    Address Ch A Смещение для данных паттерна канала A
 +3  2    Address Ch B Смещение для данных паттерна канала B
 +5  2    Address Ch C Смещение для данных паттерна канала C

------------------------------------------------------------------------------
Таблица Patterns (stp)

Каждая позиция занимает 6 байт
Off Size Name         Description
 +0  2    Address Ch A Смещение для данных паттерна канала A
 +2  2    Address Ch B Смещение для данных паттерна канала B
 +4  2    Address Ch C Смещение для данных паттерна канала C

==============================================================================

Таблица Ornaments (stc)
Полная длина орнамента = 33 байта (32 позиции в орнаменте меняются синхронно сэмплу)
Off  Size   Name            Description
 +0  1      Ornament Number номер орнамента
 +1  32byte Data            данные орнамента (каждое значение равно
                             12 полутонам т.е. октаве, величина со знаком)

------------------------------------------------------------------------------
Таблица Ornaments (stp)
Off  Size   Name            Description
 +0  1	    Loop 			точка зацикливания;
 +1  1  	Length 			полная длина;
 +2, 1*(+0) Data			отклонения от значения ноты;

==============================================================================

Таблица Samples (stc)
Полная длина сэмпла = 99 байт (32 позиции * 3 + 1)
Off Size Name          Description
 +0  1    Sample Number номер сэмпла
 +1  32*3 Data          данные сэмпла (по 3 байта на позицию)
         - байт 0 - биты 0-3 громкость,
                    биты 7-4 четыре младших бита старшего байта смещения тона
         - байт 1 - 
                  - бит 7 маска шума (0 - включен, 1 - выключен)
                  - бит 6 маска тона (0 - включен, 1 - выключен)
                  - бит 5 +- определяет направление сдвига тона
                         (1 - плюс к частоте, 0 - минус к частоте)
                  - биты 0-4 значение шума
         - байт 2 - смещение тона (младший байт)
 +97 1    Repeat Position - с какой позиции начинать повтор сэмпла и орнамента
                     (если равно нулю, канал отключается по завершении сэмпла)
 +98 1    Repeat Length - количество позиций в повторе
PS: если Repeat Length больше чем оставшихся позиций, то после 32-ой позиция переходит на первую

------------------------------------------------------------------------------
Таблица Samples (stp)
 Off Size Name          Description
 +0  1    Loop 			точка зацикливания;
 +1  1    Length		полная длина;
 +2  Length*4 QUARK		полная длина;
        - байт 0 биты 0-3 амплитуда;
                 бит 4 маска тона;
                 бит 7 маска шума;

        - байт 1 бит 0 маска огибающей;
                 биты 1-5 частота шума;

        - байт 2,3 байты частотного вибратто;

Отсюда видно, что универсальный плеер STC/STP не получится



